package cn.jh.common.pay.utils;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;

import java.io.Serializable;
import java.util.Objects;


/**
 * API接口用于接收接入方请求的数据模型。
 *
 * @author Fuchun
 * @since 1.0
 */
public class InData implements Serializable {

    // 分配给商户的应用id(商户号)，该参数需要参与数据签名
    // 对应 Merchant.merchantId
    private String appId;

    // 发送请求的时间，该参数需要参与数据签名，格式：`yyyy-MM-dd HH:mm:ss`
    private String timestamp;

    // 业务参数的集合，JSON格式字符串，最大长度不限，商户使用`AES`算法将其加密并转换为Base64格式
    private String bizData;

    @JsonProperty(ProtocolKt.PARAM_APP_ID)
    public String getAppId() {
        return appId;
    }

    public void setAppId(String appId) {
        this.appId = appId;
    }

    @JsonProperty(ProtocolKt.PARAM_TIMESTAMP)
    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    @JsonProperty(ProtocolKt.PARAM_BIZ_DATA)
    public String getBizData() {
        return bizData;
    }

    public void setBizData(String bizData) {
        this.bizData = bizData;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        InData inData = (InData) o;
        return Objects.equals(appId, inData.appId) &&
                Objects.equals(timestamp, inData.timestamp) &&
                Objects.equals(bizData, inData.bizData);
    }

    @Override
    public int hashCode() {
        return Objects.hash(appId, timestamp, bizData);
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(this)
                .add("appId", appId)
                .add("timestamp", timestamp)
                .add("bizData", bizData)
                .toString();
    }
}
